package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.business.model.UsuarioSubprogramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.business.model.UserVO;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;


public class UsuarioSubprogramaDAO
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private ConnectionFactory cf;
  
  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  public UsuarioSubprogramaDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
      this.conn = this.cf.getConnection();
    }catch(SQLException e){}
  }
  
  public Collection GetUsuarios(String Condicion) throws SQLException
  {
      String query = "SELECT usu.CODIGO codeusu,usu.NOMBRE nomusu,usu.DESCRIPCION desusu,gusu.DESCRIPCION nomgrupo, gusu.CODIGO codegrupo "+
                     "FROM paoyer.TCS_USUARIO usu, paoyer.TCS_GRUPO_USUARIO gusu "+
                     "WHERE usu.GUS_CODIGO=gusu.CODIGO "+
                     " AND usu.campo_a1 IS NULL and gusu.campo_a1 IS NULL";
      
     if(!Condicion.equals("null"))
     {
       query+= " and (usu.NOMBRE LIKE upper('%"+Condicion+"%') OR usu.DESCRIPCION LIKE upper('%"+Condicion+"%'))";
     }
     
     ResultSet rst = null;
     ArrayList lUsuarios = new ArrayList();
     rst = cf.getRecordsRset(query,null,conn);
     UsuarioSubprogramaVO usuarioVO = null;
     while ( rst.next() ) 
	 	 {
        usuarioVO =  new UsuarioSubprogramaVO();
        usuarioVO.setCodeUsuario(new Long(rst.getLong("codeusu")));
        usuarioVO.setNombreUsuario(rst.getString("nomusu"));
        usuarioVO.setDescripcion(rst.getString("desusu"));
        usuarioVO.setCodeGrupo(new Long(rst.getString("codegrupo")));
        usuarioVO.setNombreGrupo(rst.getString("nomgrupo"));
                
        lUsuarios.add(usuarioVO);
        usuarioVO=null;
		}
  	rst.close();
    return lUsuarios;
      
  }
  
  public int GetSubprogSede(String Subpro, String Sede) throws SQLException
  {
    int CodeSubprograma = Integer.parseInt(Subpro.trim());
    int CodeSede = Integer.parseInt(Sede.trim());
    int retornar = 0;
    String query = "SELECT CODIGO FROM TCS_BEN_SUBPROGRAMA_SEDE "+
                     "WHERE SEDE_CODIGO="+CodeSede+" AND SBPR_CODIGO="+CodeSubprograma+" ";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    if(rst.next())
    {
      retornar = rst.getInt("CODIGO");
    }
    rst.close();
    return retornar;
  }
    
  public ResultSet GetNombres(String Subpro, String Sede, String Prog, String User) throws SQLException
  {
    int CodeSubprograma = Integer.parseInt(Subpro.trim());
    int CodePrograma = Integer.parseInt(Prog.trim());
    int CodeSede = Integer.parseInt(Sede.trim());
    int CodeUser = Integer.parseInt(User.trim());
    List lRegistrado = new LinkedList();
    
    String query = "SELECT prog.NOMBRE nomprog, subpro.NOMBRE nomsub, sede.NOMBRE nomsede, usu.NOMBRE nomusu, gus.descripcion descripGrupo "+
                   "FROM TCS_BEN_PROGRAMA prog, TCS_BEN_SUBPROGRAMA subpro, TCS_BEN_SEDE sede, paoyer.TCS_USUARIO usu, paoyer.TCS_GRUPO_USUARIO gus "+
                   "WHERE prog.CODIGO="+CodePrograma+" AND subpro.CODIGO="+CodeSubprograma+" "+
                   "AND sede.CODIGO="+CodeSede+" AND usu.CODIGO="+CodeUser+" " +
                   "AND gus.codigo = usu.gus_codigo ";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    
    return rst;
  }
  
  public boolean Validar(String User, int UserSubpro) throws SQLException
  {
    int CodeUser = Integer.parseInt(User.trim());
    
    boolean retornar = false;
    String query = "SELECT CODIGO FROM TCS_BEN_USUARIO_SEDE "+
                   "WHERE USU_CODIGO="+CodeUser+" AND SPSE_CODIGO="+UserSubpro+" ";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    if(rst.next())
    {
      retornar = true;
    }
    rst.close();
    return retornar;
  }
  
  public int InsertUsuarioSubpro(int UsuarioSubpro, String Usuario)throws SQLException {
     
     int CodeUser = Integer.parseInt(Usuario.trim());
     String query = "INSERT INTO TCS_BEN_USUARIO_SEDE(CODIGO,USU_CODIGO, SPSE_CODIGO) "+
                     "VALUES(SCS_BEN_USE.NEXTVAL,"+CodeUser+","+UsuarioSubpro+") ";
     int bInsertoCorrectamente = cf.execSql(query, null,conn);
     return bInsertoCorrectamente;
     
}    

  public Collection getSecretaria()throws SQLException
  {
       String strSql = "select codigo, nombre from tcs_ben_area where area_codigo is null ";
       
       ResultSet rst = null;
       ArrayList secretarias = new ArrayList();
       rst = cf.getRecordsRset(strSql,null,conn);
       ProgramaVO pro = null;
       
       while ( rst.next() ) 
       {
            pro = new ProgramaVO();
            pro.setCodeArea(new Long(rst.getLong("codigo"))); 
            pro.setNombreArea(rst.getString("nombre"));
            secretarias.add(pro);
            pro=null;
       }
       rst.close();
       return secretarias;
   }
   
  public int InsertPermisosReportes(String Arr[])throws SQLException {
     
     String query = "INSERT INTO TCS_BEN_SUBPROGRAMA_USUARIO(CODIGO, SBPR_CODIGO, "+
                    "USU_CODIGO, USUARIO_CREA, FECHA_CREA, TERMINAL_CREA, "+
                    "USUARIO_MODIFICA, FECHA_MODIFICA, TERMINAL_MODIFICA) "+
                    "VALUES(SCS_BEN_SUUS.NEXTVAL,?,?,?,to_date(?,'dd/mm/rrrr'),?,?,to_date(?,'dd/mm/rrrr'),?) ";

     int bInsertoCorrectamente = cf.execSql(query, Arr,conn);
     return bInsertoCorrectamente;
     
  }
  
  public List VerificarPermisosUsuarios(String CodeUser, String CodeSubpro)throws SQLException
  {
    int verificacion = 0;
    int iCodeUser = Integer.parseInt(CodeUser.trim());
    int iCodeSubpro = Integer.parseInt(CodeSubpro.trim());
    String strSql = "SELECT DISTINCT usu.codigo codusu,usu.NOMBRE nomuser, "+
                    "usu.DESCRIPCION descuser, subpro.NOMBRE nomsub, subpro.codigo "+
                    "FROM TCS_BEN_SUBPROGRAMA subpro, paoyer.tcs_usuario usu,TCS_BEN_SUBPROGRAMA_USUARIO subus "+
                    "WHERE subpro.codigo = subus.sbpr_codigo "+
                    "AND usu.CODIGO = subus.USU_CODIGO "+
                    "AND usu.codigo = "+iCodeUser+" "+
                    "AND subpro.codigo = "+iCodeSubpro+" ";
       ResultSet rst = null;
       List lError = new LinkedList();
       UsuarioSubprogramaVO objususubVO = null;
       rst = cf.getRecordsRset(strSql,null,conn);
       if(rst.next()) 
       {
          objususubVO = new UsuarioSubprogramaVO();
          objususubVO.setNombreUsuario(rst.getString("nomuser"));
          objususubVO.setDescripcion(rst.getString("descuser"));
          objususubVO.setNombresubpro(rst.getString("nomsub"));
          lError.add(objususubVO);
          objususubVO = null;
       }
       rst.close();
       return lError;
   }
   
  public List GetGrupoUsuarios(String CodeUser)throws SQLException
  {
     int iCodeUser = Integer.parseInt(CodeUser.trim());
     String strSql = "SELECT GUS_CODIGO,NOMBRE,DESCRIPCION FROM paoyer.TCS_USUARIO "+
                     "WHERE CODIGO = "+iCodeUser+" ";
     ResultSet rst = null;
     String strGrupoUsu = "";
     List usuario = new LinkedList();
     rst = cf.getRecordsRset(strSql,null,conn);
     UserVO objUser= new UserVO();
     if(rst.next()) 
     {
        objUser.setDescription(rst.getString("DESCRIPCION"));
        objUser.setName(rst.getString("NOMBRE"));
        objUser.setUserGroupCode(new Long(rst.getString("GUS_CODIGO")));
        usuario.add(objUser);
     }
     rst.close();
     return usuario;
   }
   
   public String getSubprograma(String codeSubSede) throws SQLException {
	 String strSql = "SELECT SBPR_CODIGO " +
					 "FROM TCS_BEN_SUBPROGRAMA_SEDE " +
					 "WHERE CODIGO = "+codeSubSede;
                    
	 ResultSet rst = null;
	 rst = cf.getRecordsRset(strSql, null, conn);
    
	 rst.next();
    
	 return rst.getString("SBPR_CODIGO");
    
   }
  
	 public String getSede(String codeSubSede) throws SQLException {
	   String strSql = "SELECT SEDE_CODIGO " +
					   "FROM TCS_BEN_SUBPROGRAMA_SEDE " +
					   "WHERE CODIGO = "+codeSubSede;
                      
	   ResultSet rst = null;
	   rst = cf.getRecordsRset(strSql, null, conn);
      
	   rst.next();
      
	   return rst.getString("SEDE_CODIGO");
      
	 }
    
	 public String getPrograma(String codeSubSede) throws SQLException {
	   String strSql = "SELECT sub.PRG_CODIGO codeProg " +
					   "FROM TCS_BEN_SUBPROGRAMA sub, TCS_BEN_SUBPROGRAMA_SEDE subSede " +
					   "WHERE subSede.CODIGO = "+codeSubSede+" "+
					   "AND subSede.SBPR_CODIGO = sub.CODIGO ";
                      
	   ResultSet rst = null;
	   rst = cf.getRecordsRset(strSql, null, conn);
      
	   rst.next();
      
	   return rst.getString("codeProg");
      
	 }
  
  public Connection getConn()
 {
    return conn;
 }
}